home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / ufw / check-requirements < prev    next >
Text File  |  2009-09-23  |  5KB  |  193 lines

  1. #!/bin/sh
  2. #
  3. # check-requirements: verify all the required iptables functionality is
  4. # available
  5. #
  6. # Copyright 2008-2009 Canonical Ltd.
  7. #
  8. #    This program is free software: you can redistribute it and/or modify
  9. #    it under the terms of the GNU General Public License version 3,
  10. #    as published by the Free Software Foundation.
  11. #
  12. #    This program is distributed in the hope that it will be useful,
  13. #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. #    GNU General Public License for more details.
  16. #
  17. #    You should have received a copy of the GNU General Public License
  18. #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19. #
  20. set -e
  21.  
  22. chain="ufw-check-requirements"
  23. error=""
  24.  
  25. runcmd() {
  26.     if $@ >/dev/null 2>&1 ; then
  27.         echo pass
  28.     else
  29.         echo FAIL
  30.         error="yes"
  31.     fi
  32. }
  33.  
  34. # check binaries
  35. for i in "" 6; do
  36.     exe="iptables"
  37.     if [ "$i" = "6" ]; then
  38.         exe="ip6tables"
  39.     fi
  40.  
  41.     echo -n "Has $exe: "
  42.     if ! which $exe >/dev/null 2>&1; then
  43.         echo "ERROR: could not find '$exe'" >&2
  44.         error="yes"
  45.     else
  46.         echo "pass"
  47.     fi
  48. done
  49.  
  50. if [ -n "$error" ]; then
  51.     exit 1
  52. fi
  53. echo ""
  54.  
  55. # check modules
  56. for i in "" 6; do
  57.     exe="iptables"
  58.     c="${chain}"
  59.     ipv="4"
  60.     if [ "$i" = "6" ]; then
  61.         exe="ip6tables"
  62.         c="${chain}6"
  63.         ipv="6"
  64.     fi
  65.  
  66.     if [ "$i" = "6" ]; then
  67.         echo "== IPv6 =="
  68.     else
  69.         echo "== IPv4 =="
  70.     fi
  71.  
  72.     echo -n "Creating '$c'... "
  73.     $exe -N "$c" || {
  74.         echo "ERROR: could not create '$c'. Aborting" >&2
  75.         error="yes"
  76.         break
  77.     }
  78.     echo "done"
  79.  
  80.     # set up a RETURN rule right at the top, so we don't open anything up when
  81.     # running the script. Isn't attached to INPUT, but better safe than sorry.
  82.     echo -n "Inserting RETURN at top of '$c'... "
  83.     $exe -I "$c" -j RETURN || {
  84.         echo "ERROR: could insert RETURN rule into '$c'. Aborting" >&2
  85.         error="yes"
  86.         break
  87.     }
  88.     echo "done"
  89.  
  90.     echo -n "TCP: "
  91.     runcmd $exe -A $c -p tcp -j ACCEPT
  92.  
  93.     echo -n "UDP: "
  94.     runcmd $exe -A $c -p udp -j ACCEPT
  95.  
  96.     echo -n "destination port: "
  97.     runcmd $exe -A $c -p tcp --dport 22 -j ACCEPT
  98.  
  99.     echo -n "source port: "
  100.     runcmd $exe -A $c -p tcp --sport 22 -j ACCEPT
  101.  
  102.     for j in ACCEPT DROP REJECT LOG; do
  103.         echo -n "$j: "
  104.         runcmd $exe -A $c -p tcp --sport 23 -j $j
  105.     done
  106.  
  107.     echo -n "hashlimit: "
  108.     runcmd $exe -A $c -m hashlimit -m tcp -p tcp --dport 22 --hashlimit 1/min --hashlimit-mode srcip --hashlimit-name ssh -m state --state NEW -j ACCEPT
  109.  
  110.     echo -n "limit: "
  111.     runcmd $exe -A $c -m limit --limit 3/min --limit-burst 10 -j ACCEPT
  112.  
  113.     for j in NEW RELATED ESTABLISHED INVALID; do
  114.         echo -n "state ($j): "
  115.         runcmd $exe -A $c -m state --state $j
  116.     done
  117.  
  118.     echo -n "state (new, recent set): "
  119.     runcmd $exe -A $c -m state --state NEW -m recent --set
  120.  
  121.     echo -n "state (new, recent update): "
  122.     runcmd $exe -A $c -m state --state NEW -m recent --update --seconds 30 --hitcount 6 -j ACCEPT
  123.  
  124.     echo -n "state (new, limit): "
  125.     runcmd $exe -A $c -m state --state NEW -m limit --limit 3/min --limit-burst 10 -j ACCEPT
  126.  
  127.     echo -n "interface (input): "
  128.     runcmd $exe -A $c -i eth0 -j ACCEPT
  129.  
  130.     echo -n "interface (output): "
  131.     runcmd $exe -A $c -o eth0 -j ACCEPT
  132.  
  133.     echo -n "multiport: "
  134.     runcmd $exe -A $c -p tcp -m multiport --dports 80,443,8080:8090 -j ACCEPT
  135.  
  136.     echo -n "comment: "
  137.     runcmd $exe -A $c -m comment --comment 'dapp_Samba'
  138.  
  139.     if [ -z "$i" ]; then
  140.         for j in LOCAL MULTICAST BROADCAST; do
  141.             echo -n "addrtype ($j): "
  142.             runcmd $exe -A $c -m addrtype --dst-type $j -j RETURN
  143.         done
  144.  
  145.         for j in destination-unreachable source-quench time-exceeded parameter-problem echo-request; do
  146.             echo -n "icmp ($j): "
  147.             runcmd $exe -A $c -p icmp --icmp-type $j -j ACCEPT
  148.         done
  149.     else
  150.         for j in destination-unreachable packet-too-big time-exceeded parameter-problem echo-request; do
  151.             echo -n "icmpv6 ($j): "
  152.             runcmd $exe -A $c -p icmpv6 --icmpv6-type $j -j ACCEPT
  153.         done
  154.  
  155.         for j in neighbor-solicitation neighbor-advertisement router-solicitation router-advertisement; do
  156.             echo -n "icmpv6 with hl ($j): "
  157.             runcmd $exe -A $c -p icmpv6 --icmpv6-type $j -m hl --hl-eq 255 -j ACCEPT
  158.         done
  159.     fi
  160.  
  161.     echo ""
  162. done
  163.  
  164. # cleanup
  165. for i in "" 6; do
  166.     exe="iptables"
  167.     c="${chain}"
  168.     if [ "$i" = "6" ]; then
  169.         exe="ip6tables"
  170.         c="${chain}6"
  171.     fi
  172.     $exe -F $c >/dev/null 2>&1 || {
  173.         if [ -z "$error" ]; then
  174.             echo "ERROR: could not flush '$c'" >&2
  175.             error="yes"
  176.         fi
  177.     }
  178.     $exe -X $c >/dev/null 2>&1 || {
  179.         if [ -z "$error" ]; then
  180.             error="yes"
  181.             echo "ERROR: could not remove '$c'" >&2
  182.         fi
  183.     }
  184. done
  185.  
  186. if [ -n "$error" ]; then
  187.     echo "FAIL: check your kernel and that you have iptables >= 1.4.0"
  188.     exit 1
  189. fi
  190. echo "All tests passed"
  191. exit 0
  192.  
  193.